package org.example.Tools;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;

public class MapDemo {


    //实现类	            数据结构	        线程安全	顺序特性	            性能特点	            适用场景
    //HashMap	        数组+链表/红黑树	不安全	无序	                最优的插入和查询性能	大多数非并发场景
    //LinkedHashMap	    哈希表+双向链表	不安全	插入顺序/访问顺序	    接近 HashMap	        需要保持插入顺序的场景
    //TreeMap	        红黑树	        不安全	键的自然排序/自定义排序	O(log n) 时间复杂度	需要排序的场景
    //Hashtable	        数组+链表	    安全	    无序	                全表锁	    遗留系统（已被 ConcurrentHashMap 取代）
    //ConcurrentHashMap	分段锁+数组+链表	安全	    无序	                高效并发访问	        高并发环境
    public static void main(String[] args) {
        HashMap<String, Object> map1 = new HashMap<>();
        LinkedHashMap<String, Object> map2 = new LinkedHashMap<>();
        TreeMap<String, Object> map3 = new TreeMap<>();
        ConcurrentHashMap<String, Object> map4 = new ConcurrentHashMap<>();

        Map<String, Double> prices = new HashMap<>();
        prices.put("Apple", 2.99);
        prices.put("Banana", 1.49);
        prices.put("Orange", 3.29);

        // 方式1: 键迭代
        System.out.println("\n--- 键迭代 ---");
        for (String fruit : prices.keySet()) {
            Double price = prices.get(fruit);
            System.out.println(fruit + ": $" + price);
        }

        // 方式2: 值迭代
        System.out.println("\n--- 值迭代 ---");
        for (Double price : prices.values()) {
            System.out.println("$" + price);
        }

        // 方式3: 键值对迭代
        System.out.println("\n--- 键值对迭代 ---");
        for (Map.Entry<String, Double> entry : prices.entrySet()) {
            System.out.println(entry.getKey() + ": $" + entry.getValue());
        }

        // 方式4: Java 8 forEach
        System.out.println("\n--- forEach + Lambda ---");
        prices.forEach((key, value) ->
                System.out.println(key + ": $" + value));
    }
}
